package com.edu.leetcode.dataStruct;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * <p>
 * 如果反转后整数超过 32 位的有符号整数的范围[-2^31,2^31] ，就返回 0。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-integer
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @作者 five-five
 * @创建时间 2021/4/9
 */
public class Demo13 {
    public static void main(String[] args) {
        Demo13 demo13 = new Demo13();
        int reverse = demo13.reverse(-2147483412);
        System.out.println(reverse);
        System.out.println(demo13.nums);
    }

    /**
     *
     * @param x
     * @return
     */
    public int reverse(int x) {
        if (x > -10 && x < 10) {
            return x;
        }
        //todo:直接使用%10来记录每一位的数
        help(x);
        int result=0;
        for (int i = 0; i < this.nums.size(); i++) {
            //开始相乘
            int multiTen = (int)Math.pow(10, this.nums.size() - i-1);
            result += nums.get(i) * multiTen;
            //判断是否 大于 最大32位整数
            if (result>214748364 || (result==214748364 && result>7)) {
                return 0;
            }
            //判断是否 小于 最小32位整数
            if (result<-214748364 || (result==-214748364 && result<-8)) {
                return 0;
            }
        }
        return result;
    }

    private List<Integer> nums = new ArrayList<>();
    private int help(int x) {
        if (Math.abs(x) < 10) {
            nums.add(x);
            return x;
        }
        int temp=x%10;
        x = x / 10;
        this.nums.add(temp);
        return help(x);
    }
}
